home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tiger Disk 6
/
Tiger_Disk_006_19xx_Tiger-Crew-Disk_de_Side_B.d64
/
6 mk
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2023-02-26
|
7KB
|
165 lines
8 clr
10 u$="[197][197][197][197][197][197][197][197][197][197]":o$="[164][164][164][164][164][164][164][164][164]"
100 data24,173,0,128,105,128,141,0,128,96,56,173,0,128,233,128,141,0,128,96
110 restore:fori=830to849:readin:pokei,in:next
200 print"[147][164][164]";o$;o$;o$;o$:print"syntax-lehrgang 'maschinensprache' (6)"
210 printo$;o$;o$;"[164][164][164][164][164]":print"1.3.2. arithmetische operationen[146]"
220 print"arithmetische operationen sind solche"
230 print"operationen, bei denen addiert oder"
240 print"subtrahiert wird. sie beeinflussen alle"
250 print"das z-flag und das n-flag. d.h.: wenn"
260 print"das rechenergebnis null (negativ) ist,"
270 print"setzt die cpu das z- (n-) flag."
310 i=1:gosub5000:ifflthen200
400 print"[147]die befehle adc, sbc, cmp, cpx und cpy"
410 print"beeinflussen ferner das c-flg (c=carry,"
420 print"uebertrag)."
430 print"im carry-flag werden uebertraege bei"
440 print"rechenoperationen registriert. das er-"
450 print"gebnis der addition der zwei zahlen $ff"
460 print"und $01 ist $00, das carry-flag wird"
470 print"dabei gesetzt."
510 i=2:gosub5000:ifflthen200
600 print"[147]eine wesentliche besonderheit ist der"
610 print"dezimale rechenmodus: er[160] kann durch"
620 print"setzen des d-flags fuer die befehle adc"
630 print"und sbc eingeschaltet werden. er be-"
640 print"wirkt, dass die cpu das byte $12 jetzt"
650 print"als dezimalzahl 12 auffasst und bear-"
660 print"beitet."
670 print"das ergebnis der addition '$09 + $01'"
680 print"ist dann nicht mehr $0a, sondern $10 !"
690 print"es wird hier also die dezimale addition"
700 print"'9 + 1 = 10' ausgefuehrt."
740 i=3:gosub5000:ifflthen400
800 print"[147][164][164][164]":print"adc[146]: add memory to accumul. with carry"
810 print" [197][197]";spc(26);"[197]"
820 print"zum inhalt des accumulators werden das"
830 print"adressierte byte sowie das carry-flag"
850 print"addiert. die summe steht anschliessend"
860 print"im ac. entstand ein ueberlauf, so wird"
870 print"das c-flag gesetzt, andernfalls rueck-"
880 print"gesetzt."
890 print"vor einer addition muss man also das c-"
900 print"-flag ruecksetzen, damit nicht das er-"
910 print"gebnis um eins zu gross geraet, falls"
920 print"das c-flag zufaellig gesetzt war."
930 i=4:gosub5000:ifflthen600
1000 print"[147]beispiele:":printu$
1010 print"1. es soll berechnet werden $01 + $01 !"
1015 print" ($01 + $01 = $02)"
1020 printtab(9);"clc";spc(9);"loescht das c-flag"
1030 printtab(21);"(kommt spaeter!)"
1040 printtab(9);"lda # $01 laed $01 in den ac"
1050 printtab(9);"adc # $01 addiert $01 dazu"
1060 print"das ergebnis (= $02) steht im ac, das"
1070 print"c-flag ist nicht gesetzt."
1130 i=5:gosub5000:ifflthen800
1200 print"[147]2. es soll berechnet werden $ff + $01 !"
1210 print" ($ff + $01 = $0100)
1220 [153][163]9);"clc";[166]9);"loescht das c-flag"
1230 [153][163]21);"(kommt spaeter!)"
1240 [153][163]9);"lda # $ff laed $ff in den ac"
1250 [153][163]9);"adc # $01 addiert $01 dazu"
1260 [153]"das ergebnis (= $00) steht im ac, das"
1270 [153]"c-flag ist gesetzt."
1280 i[178]6:[141]5000:[139]fl[167]1000
1400 [153]"loadtototo":[153]"sbcwait subtract memory from ac with carry"
1410 [153]" tab( tab(";[163]33);"tab("
1420 [153]"subtrahiert das adressierte byte und"
1430 [153]"das invertierte carry-flag vom ac. der"
1440 [153]"programmierer muss vor der ersten sub-"
1450 [153]"traktion das carry-flag setzen, damit"
1455 [153]"das ergebnis nicht um eins zu klein"
1460 [153]"wird. weil das invertierte c-flag sub-":[153][163]16);u$;"val"
1470 [153]"trahiert wird, ist das gerade umgekehrt"
1480 [153]"wie bei der addition mit adc."
1510 i[178]7:[141]5000:[139]fl[167]1200
1600 [153]"loadfindet bei der subtraktion ein ueber-"
1610 [153]"lauf statt (d.h.die differenz ist klei-"
1615 [153]"ner als null),so wird das c-flagcloserueck-"
1620 [153]"gesetzt,andernfalls gesetzt. also genau"
1622 [153]"umgekehrt wie bei adc."
1630 [153]"bei adc und sbc traegt das c-flag einen"
1640 [153]"eventuell entstehenden uebertrag. damit"
1650 [153]"ist es moeglich, zahlen, die mehr als"
1655 [153]"nur ein byte umfassen, einfach zu bear-"
1660 [153]"beiten. hierzu zwei beispiele:"
1710 i[178]8:[141]5000:[139]fl[167]1400
1800 [153]"loadbeispiel (zuerst addition) :":[153]u$;u$;u$
1815 [153]"in den speichern $01, $02 und $11, $12"
1820 [153]"stehen zwei zweistellige hex-zahlen.sie"
1830 [153]"sollen addiert und nach $21, $22, $23"
1840 [153]"gespeichert werden. das niederwertigere"
1850 [153]"byte steht jeweils im ersten speicher."
1855 [153]"bei der loesung wenden wir den automa-"
1860 [153]"tischen ueberlauf an:"
1910 i[178]9:[141]5000:[139]fl[167]1600
2000 [153]"loadclc ruecksetzen des c-flags"
2005 [153]"lda $01 laed erste zahl,l in ac"
2010 [153]"adc $11 + zweite zahl,l"
2015 [153]"sta $21 summe,l nach $21"
2020 [153]"lda $02 laed erste zahl,h in ac"
2030 [153]"adc $12 + zweite zahl,h + uebertrag"
2040 [153]"sta $22 summe,h1 nach $22"
2050 [153]"lda # $00 laed $00 in ac"
2055 [153]"adc # $00 + $00 + uebertrag"
2060 [153]"sta $23 summe,h2 nach $23"
2110 i[178]10:[141]5000:[139]fl[167]1800
2200 [153]"loadbei der ersten addition ist das c-flag"
2210 [153]"rueckgesetzt. addiert werden also nur"
2220 [153]"die inhalte der speicher $01 und $11."
2230 [153]"eine eventueller ueberlauf steht im c-"
2240 [153]"flag. vor der zweiten addition wird das"
2250 [153]"c-flag nicht rueckgesetzt.bei der zwei-"
2260 [153]"ten addition wird der uebertrag also"
2270 [153]"mit dazu addiert. ebenso im dritten"
2280 [153]"additionsschritt: es werden die zahlen"
2290 [153]"$00, $00 und das c-flag addiert.das er-"
2300 [153]"gebnis ist identisch mit dem uebertrag."
2310 i[178]11:[141]5000:[139]fl[167]2000
2400 [153]"loadbeispiel (jetzt subtraktion) :":[153]u$;u$;u$
2410 [153]"sec setzen des c-flags"
2420 [153]"lda $01 laed erste zahl,l in ac"
2430 [153]"sbc $11 - zweite zahl,l"
2440 [153]"sta $21 differenz,l nach $21"
2450 [153]"lda $02 laed erste zahl,h in ac"
2460 [153]"sbc $12 - zweite zahl,h - uebertrag"
2470 [153]"sta $22 differenz,h1 nach $22"
2480 [153]"lda # $00 laed $00 in ac"
2490 [153]"sbc # $00 - uebertrag"
2500 [153]"sta $23 differenz,h2 nach $23"
2510 i[178]12:[141]5000:[139]fl[167]2200
2600 [153]"loadbei dieser subtraktion steht im spei-"
2620 [153]"cher $23 nur dann null, wenn die erste"
2630 [153]"zahl groesser als die zweite war. an-"
2640 [153]"dernfalls fuehrtclose die subtraktion zum"
2650 [153]"speicherinhalt $ff.ueberlegen sie sich,"
2660 [153]"warum!"
2670 [153]"die beiden befehle adc und sbc beein-"
2680 [153]"flussen die flags n,z,c,v. auf die be-"
2690 [153]"deutung des v-flags wollen wir im rah-"
2700 [153]"men dieses lehrgangs nicht eingehen."
2710 i[178]13:[141]5000:[139]fl[167]2400
2800 [153]"loadaufgaben :":[153]u$
2810 [153]"1. schreiben sie ein maschinenprogramm,"
2820 [153]"das zum inhalt des speichers $8000 die"
2830 [153]"zahl $80 hinzuaddiert. ein hierbei ent-"
2840 [153]"stehender uebertrag ist ohne bedeutung."
2850 [153]"2. dasselbe mit subtraktion!"
2860 [153]"falls sie die loesung nicht finden: die"
2870 [153]"beiden programme stehen ab den speicher"
2880 [153]"stellen 830 und 840.sie koennen sie mit"
2890 [153]"sys 830 bzw. sys 840 aufrufen."
2910 [153]" - seite 14 - <+> ontotototocmdcmdcmdcmdendewait <-> von vorne";
3060 [141]5020:[145]fl[137]0:[153]"load":[128]:[138]
5000 [143] umblaettern
5010 [153]" - seite";i;"- <+> weiter <-> zurueck";
5020 [129]i[178]0[164]11:[161]x$:[130]
5030 [161]x$:[139]x$[178]""[167]5030
5040 [139]x$[178]"+"[167]fl[178]0:[142]
5050 [139]x$[178]"-"[167]fl[178]1:[142]
5060 [137]5030
65401 [246]ea[255]
0